<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //  var会提升变量的声明到当前作用域的顶部
        //console.log(a); //undefined
        //var a = 10;


        //let const 不存在变量的提升
        // console.log(b); // Cannot access 'b' before initialization
        // let b = 10;

        //暂时性死区:只要作用域内存在let const 
        //他们所声明的变量或者常量就自动绑定这个区域，不再受到外部作用域的影响
        // let b = 1;
        //
        // function fn() {
        //     console.log(b); //1
        // }
        //
        // fn();


        //  let a = 2;
        //
        //  function func() {
        //      console.log(a); //Cannot access 'a' before initialization
        //      let a = 1;
        //  }
        //
        //  func();

        //window对象的属性和方法
        //全局作用域中，var声明的变量，通过function声明的函数，会自动变成window对象的属性和方法
        //let const 不会

        //var function
        //    var age = 19;
        //
        //    function add() {}
        //    console.log(window.age); //19
        //    console.log(window.add === add); //true
        //块级作用域：var 没有块级作用域
        //   for (var i = 0; i < 3; i++) {
        //       //console.log(i); //0 1 2
        //   }

        //   console.log(i); //3

        //let const有块级作用域
        for (let i = 0; i < 3; i++) {
            //console.log(i); //0 1 2
        }

        console.log(i); // Uncaught ReferenceError: i is not defined
        //作用域链：内层作用域—外层作用域—……全局作用域


        //有哪些有块级作用域
        //{} for(){}  while(){} do {}while() if(){}  switch(){}
    </script>
</body>

</html>